package com.education.ai.service;

import com.education.ai.entity.Teacher;
import com.education.ai.model.dto.LoginRequest;
import com.education.ai.model.dto.ChangePasswordRequest;
import com.education.ai.model.dto.RegisterRequest;
import com.education.ai.model.dto.TeacherResponse;
import com.education.ai.model.dto.UserResponse;
import com.education.ai.model.dto.StudentResponse;

/**
 * 认证服务接口
 */
public interface AuthService {
    
    /**
     * 教师注册
     * 
     * @param registerRequest 注册请求
     * @return 教师信息
     */
    TeacherResponse registerTeacher(RegisterRequest registerRequest);
    
    /**
     * 学生注册
     * 
     * @param registerRequest 注册请求
     * @return 学生信息
     */
    StudentResponse registerStudent(RegisterRequest registerRequest);
    
    /**
     * 用户登录
     * 
     * @param loginRequest 登录请求
     * @return 用户信息
     */
    UserResponse login(LoginRequest loginRequest);
    
    /**
     * 根据姓名查找教师
     * 
     * @param name 教师姓名
     * @return 教师信息
     */
    TeacherResponse findTeacherByName(String name);
    
    /**
     * 修改密码
     * 
     * @param userId 用户ID
     * @param request 修改密码请求
     */
    void changePassword(String userId, ChangePasswordRequest request);
    
    /**
     * 根据教师ID获取教师信息
     * 
     * @param teacherId 教师ID
     * @return 教师信息
     */
    TeacherResponse getTeacherById(String teacherId);
    
    /**
     * 生成令牌
     * 
     * @param userId 用户ID
     * @param userRole 用户角色
     * @return 令牌
     */
    String generateToken(String userId, Integer userRole);
    
    /**
     * 从令牌中获取用户ID
     * 
     * @param token 令牌
     * @return 用户ID
     */
    String getUserIdFromToken(String token);
    
    /**
     * 从令牌中获取用户角色
     * 
     * @param token 令牌
     * @return 用户角色
     */
    Integer getUserRoleFromToken(String token);
    
    /**
     * 退出登录
     * 
     * @param userId 用户ID
     */
    void logout(String userId);
    
    /**
     * 生成8位教师工号
     * 
     * @return 8位教师工号
     */
    String generateTeacherId();
    
    /**
     * 生成8位学生学号
     * 
     * @return 8位学生学号
     */
    String generateStudentId();
} 